<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>CaRScript</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/CaRScript"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-CaRScript rootpage-CaRScript skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">CaRScript</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>Un <i><b>CaRScript</b></i> est un <a href="Langage_de_script" title="Langage de script">script</a> pour le logiciel de <a href="G%C3%A9om%C3%A9trie_dynamique" title="Géométrie dynamique">géométrie dynamique</a> <a href="CaRMetal" title="CaRMetal">CaRMetal</a>. Le terme est un <a href="N%C3%A9ologisme" title="Néologisme">néologisme</a> obtenu par <a href="Apocope" title="Apocope">apocope</a> et <a href="Aph%C3%A9r%C3%A8se_(linguistique)" title="Aphérèse (linguistique)">aphérèse</a> sur l'expression "CaRMetal-JavaScript". Le langage des <i>CaRScripts</i> est donc <a href="JavaScript" title="JavaScript">JavaScript</a>. Mais des instructions spécifiques à la géométrie dynamique sont incluses dans la boîte à outils des CaRScripts, ce qui tend à donner des codes courts, par rapport à l'effet produit. Et l'usage conjoint du langage de scripts et de la géométrie dynamique permet d'avoir des figures à la fois complexes et dynamiques.
</p>
<div class="mw-heading mw-heading2"><h2 id="Scripts_et_géométrie_dynamique"><span id="Scripts_et_g.C3.A9om.C3.A9trie_dynamique"></span>Scripts et géométrie dynamique</h2></div>
<div class="mw-heading mw-heading3"><h3 id="DrGeo">DrGeo</h3></div>
<p><a href="DrGeo" title="DrGeo">DrGeo</a> est muni d'un langage de script, permettant de construire notamment des <a href="Fractales" class="mw-redirect" title="Fractales">fractales</a>. Ce langage issu de <a href="Lisp" title="Lisp">Lisp</a> est basé sur la <a href="R%C3%A9cursivit%C3%A9" title="Récursivité">récursivité</a> et n'est pas très emblématique de la démarche <a href="Algorithmique" title="Algorithmique">algorithmique</a>. Mais la suite, DrGeoII, est dotée du langage <a href="SmallTalk" class="mw-redirect" title="SmallTalk">SmallTalk</a> (qui est un langage objet, donc pas tout à fait conforme aux attendus du programme d'algorithmique).
</p>
<div class="mw-heading mw-heading3"><h3 id="Kig">Kig</h3></div>
<p>Kig est lui aussi muni d'un langage de script, à savoir <a href="Python_(langage)" title="Python (langage)">Python</a>. Ce langage de script est un <a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">langage objet</a> ce qui peut le faire trouver un peu compliqué pour un usage en classe.
</p>
<div class="mw-heading mw-heading3"><h3 id="Tracenpoche">Tracenpoche</h3></div>
<p><a href="TracenPoche" title="TracenPoche">TracenPoche</a> permet de construire les objets à l'aide de boutons mais également à l'aide du script qui constitue la véritable définition de la figure. La syntaxe qui a été choisie est proche de la syntaxe naturelle :
</p><p><br>
<code>Nom_objet = Nature_Objet(Paramètres) { options d'affichage }.</code>
</p><p>Une particularité de <i>TracenPoche</i> est l'interactivité dans les deux sens, entre la figure et le script (le sens allant de la figure au script est inédit). Par contre le langage de script de <i>TracenPoche</i> ne permet pas d'écrire des boucles à condition d'arrêt (boucles <i>Tant que</i>).
</p>
<div class="mw-heading mw-heading3"><h3 id="Cinderella">Cinderella</h3></div>
<p><a href="Cinderella_(logiciel)" title="Cinderella (logiciel)">Cinderella (logiciel)</a> est depuis la version 2, muni de son propre langage de script appelé <i>CindyScript</i>. CindyScript est un <a href="Langage_proc%C3%A9dural" class="mw-redirect" title="Langage procédural">langage procédural</a> donc adapté à l'<a href="Enseignement" title="Enseignement">enseignement</a> de l'<a href="Algorithmique" title="Algorithmique">algorithmique</a> dans l'<a href="Enseignement_secondaire" title="Enseignement secondaire">enseignement secondaire</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="CaRMetal">CaRMetal</h3></div>
<p>CaRMetal utilise pour langage de script, <a href="JavaScript" title="JavaScript">JavaScript</a>, langage proche de <a href="Java_(langage)" title="Java (langage)">Java</a>, <a href="C%2B%2B" title="C++">C++</a>, le <a href="Langage_de_programmation" title="Langage de programmation">langage de programmation</a> de <a href="Xcas" title="Xcas">Xcas</a> mais aussi du langage <a href="Asymptote_(logiciel)" title="Asymptote (logiciel)">Asymptote</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Géoplan/Géospace"><span id="G.C3.A9oplan.2FG.C3.A9ospace"></span>Géoplan/Géospace</h3></div>
<p><a href="G%C3%A9oplan" class="mw-redirect" title="Géoplan">Géoplan</a>/Géospace peut être piloté par le langage de script <a href="Vbscript" class="mw-redirect" title="Vbscript">Vbscript</a> de Microsoft. Des boutons peuvent ainsi créer, détruire ou manipuler des objets depuis un document externe à l'application, comme une présentation ou un <a href="Tableur" title="Tableur">tableur</a>. La technique n'a cependant pas été adoptée au-delà d'un petit cercle d'initiés, permettant par exemple des imagiciels où la réponse de l'étudiant est validée depuis l'extérieur.
</p>
<div class="mw-heading mw-heading2"><h2 id="Création_d'objets_géométriques"><span id="Cr.C3.A9ation_d.27objets_g.C3.A9om.C3.A9triques"></span>Création d'objets géométriques</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Type_des_variables">Type des variables</h3></div>
<p>Les objets créés dans les CaRScripts sont en général des objets de type <a href="Cha%C3%AEne_de_caract%C3%A8res" title="Chaîne de caractères">chaîne de caractères</a>. Par exemple,
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">a</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="mf">2</span><span class="p">,</span><span class="mf">3</span><span class="p">);</span>
</pre></div>
<p>crée un point et met son nom dans la variable <i>a</i>. Les coordonnées initiales du point sont 2 et 3 mais celui-ci peut bouger avec la souris puisqu'il n'a pas été fixé. On peut aussi créer en <a href="Programmation_proc%C3%A9durale" title="Programmation procédurale">programmation procédurale</a> par
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">Point</span><span class="p">(</span><span class="s2">"A"</span><span class="p">,</span><span class="mf">2</span><span class="p">,</span><span class="mf">3</span><span class="p">);</span>
</pre></div>
<p>Une fois que le nom d'un objet est stocké dans une variable, il est possible de faire appel à cette variable pour utiliser l'objet. Par exemple
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">a</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="mf">2</span><span class="p">,</span><span class="mf">3</span><span class="p">);</span><span class="w"> </span><span class="nx">SetHide</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="kc">true</span><span class="p">);</span>
<span class="nx">b</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="mf">4</span><span class="p">,</span><span class="mf">5</span><span class="p">);</span><span class="w"> </span><span class="nx">SetPointType</span><span class="p">(</span><span class="nx">b</span><span class="p">,</span><span class="s2">"cross"</span><span class="p">);</span>
<span class="nx">s</span><span class="o">=</span><span class="nx">Segment</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">);</span>
</pre></div>
<p>L'effet est de cacher le premier point et de donner au second point une forme de <a href="Croix_(symbole)" class="mw-redirect" title="Croix (symbole)">croix</a> puis de construire le segment joignant ces deux points, segment dont le nom est stocké dans la variable <i>s</i>.
</p><p>Les constructions telles que <i>Point</i> s'obtiennent en cliquant sur des icônes à droite de l'éditeur JavaScript et ce faisant on obtient un exemple tout fait qu'on n'a plus qu'à modifier. Ce remplacement de la <a href="Cr%C3%A9ativit%C3%A9" title="Créativité">création</a> par la modification est un <a href="Paradigme" title="Paradigme">paradigme</a> issu du monde de la <a href="Technologie" title="Technologie">technologie</a>: Choisir un outil dans une boîte à outils est plus rapide qu'avoir à construire l'outil.
</p>
<div class="mw-heading mw-heading3"><h3 id="Variables_numériques"><span id="Variables_num.C3.A9riques"></span>Variables numériques</h3></div>
<p>Pour afficher le contenu d'une variable numérique (utile pour le <a href="D%C3%A9bogage" class="mw-redirect" title="Débogage">débogage</a>) on dispose de la fonction <i>Println</i> mais aussi de la possibilité d'ouvrir une fenêtre d'affichage de données avec <i>Alert()</i>. Ainsi, pour savoir ce que contient la variable <i>x</i>, on a le choix entre
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">Println</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span>
<span class="nx">Alert</span><span class="p">(</span><span class="nx">x</span><span class="p">);</span>
</pre></div>
<p>En réalité, l'objet affiché est une <a href="Cha%C3%AEne_de_caract%C3%A8res" title="Chaîne de caractères">chaîne de caractères</a>, au besoin convertie automatiquement depuis un autre type, et il est possible d'obtenir des affichages complexes avec la <a href="Concat%C3%A9nation" title="Concaténation">concaténation</a> de chaînes. Une entrée de données est également possible, soit avec <i>Input</i> qui ouvre une boîte d'entrée de données, soit avec <i>InteractiveInput</i> qui demande à l'utilisateur de sélectionner un objet géométrique de la figure, en cliquant dessus. Ces <a href="Instruction_informatique" title="Instruction informatique">instructions</a> en JavaScript s'obtiennent en cliquant sur les entrées correspondantes dans le menu en bas à droite de l'éditeur JavaScript.
</p>
<div class="mw-heading mw-heading3"><h3 id="Écriture_dans_le_langage_de_CaRMetal"><span id=".C3.89criture_dans_le_langage_de_CaRMetal"></span>Écriture dans le langage de CaRMetal</h3></div>
<p>Dans les exemples ci-dessus, les coordonnées des points sont données sous forme numérique. En fait elles sont automatiquement converties en chaînes de caractères, et il est tout à fait possible d'entrer les coordonnées des points directement sous forme de chaînes de caractères! Et dans ce cas, écrire la chaîne dans le langage de CaRMetal permet de créer par programme des objets dynamiques. Par exemple
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">a</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="s2">"2.72"</span><span class="p">,</span><span class="s2">"3.14"</span><span class="p">);</span>
<span class="nx">b</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="s2">"round(x_a)"</span><span class="p">,</span><span class="s2">"round(y_a)"</span><span class="p">);</span>
</pre></div>
<p>Deux points sont créés, l'un mobile, l'autre qui suit le premier, mais en gardant des coordonnées entières (c'est donc un <a href="Entier_de_Gauss" title="Entier de Gauss">entier de Gauss</a>). Comme on ne sait pas d'avance comment <a href="CaRMetal" title="CaRMetal">CaRMetal</a> a nommé le point, on peut avoir son abscisse avec <i>"x("+a+")"</i>qu'on peut abréger en <i>x_a</i>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Boucles">Boucles</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Tests">Tests</h3></div>
<p>Il est possible de donner à un objet un aspect qui dépend du résultat d'un test, comme dans ce début (le calcul n'est pas effectué) d'<a href="Impl%C3%A9mentation" class="mw-redirect" title="Implémentation">implémentation</a> du <a href="Calcul_(math%C3%A9matiques)" title="Calcul (mathématiques)">calcul</a> de <a href="Pi" title="Pi">pi</a> par la <a href="M%C3%A9thode_de_Monte-Carlo" title="Méthode de Monte-Carlo">méthode de Monte-Carlo</a>:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">for</span><span class="p">(</span><span class="nx">n</span><span class="o">=</span><span class="mf">1</span><span class="p">;</span><span class="nx">n</span><span class="err">≤</span><span class="mf">100</span><span class="p">;</span><span class="nx">n</span><span class="o">++</span><span class="p">){</span>
<span class="w"> </span><span class="nx">x</span><span class="o">=</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">();</span>
<span class="w"> </span><span class="nx">y</span><span class="o">=</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span>
<span class="w"> </span><span class="nx">p</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span><span class="nx">y</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="nx">x</span><span class="o">*</span><span class="nx">x</span><span class="o">+</span><span class="nx">y</span><span class="o">*</span><span class="nx">y</span><span class="o"><</span><span class="mf">1</span><span class="p">){</span>
<span class="w"> </span><span class="nx">SetColor</span><span class="p">(</span><span class="nx">p</span><span class="p">,</span><span class="s2">"red"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">SetColor</span><span class="p">(</span><span class="nx">p</span><span class="p">,</span><span class="s2">"blue"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Boucles_à_nombre_prédéterminé_d'exécutions"><span id="Boucles_.C3.A0_nombre_pr.C3.A9d.C3.A9termin.C3.A9_d.27ex.C3.A9cutions"></span>Boucles à nombre prédéterminé d'exécutions</h3></div>
<p>La syntaxe des boucles par JavaScript n'est pas des plus simples, mais elle permet facilement d'avoir des boucles où l'indice ne suit pas une progression arithmétique, comme dans cette liste des <a href="Nombres_premiers" class="mw-redirect" title="Nombres premiers">nombres premiers</a> de la catégorie <a href="Nombre_de_Fermat" title="Nombre de Fermat">nombre de Fermat</a>:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">for</span><span class="p">(</span><span class="nx">p</span><span class="o">=</span><span class="mf">1</span><span class="p">;</span><span class="nx">p</span><span class="err">≤</span><span class="mf">16</span><span class="p">;</span><span class="nx">p</span><span class="o">*=</span><span class="mf">2</span><span class="p">){</span>
<span class="w"> </span><span class="nx">Println</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">pow</span><span class="p">(</span><span class="mf">2</span><span class="p">,</span><span class="nx">p</span><span class="p">)</span><span class="o">+</span><span class="mf">1</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Boucles_à_condition_de_sortie"><span id="Boucles_.C3.A0_condition_de_sortie"></span>Boucles à condition de sortie</h3></div>
<p>Pour obtenir une boucle à condition de sortie, on clique sur <i>while</i> ou sur <i>do..while</i> dans le menu JavaScript en bas à droite. Ces boucles sont utiles pour fabriquer des figures récursives mais aussi pour simuler les boucles à nombre prédéfini d'exécutions:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="k">for</span><span class="p">(</span><span class="nx">i</span><span class="o">=</span><span class="mf">1</span><span class="p">;</span><span class="nx">i</span><span class="err">≤</span><span class="mf">10</span><span class="p">;</span><span class="nx">i</span><span class="o">++</span><span class="p">){</span>
<span class="w"> </span><span class="nx">Println</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>a le même effet que
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">i</span><span class="o">=</span><span class="mf">1</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="nx">i</span><span class="err">≤</span><span class="mf">10</span><span class="p">){</span>
<span class="w"> </span><span class="nx">Println</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>
<span class="w"> </span><span class="nx">i</span><span class="o">=</span><span class="nx">i</span><span class="o">+</span><span class="mf">1</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Exemple">Exemple</h3></div>
<p>Le script du <a href="Triangle_de_Sierpinski" class="mw-redirect" title="Triangle de Sierpinski">triangle de Sierpinski</a> est assez court en CaRMetal grâce à l'abondance d'instructions graphiques toutes faites:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">a</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="o">-</span><span class="mf">4</span><span class="p">,</span><span class="o">-</span><span class="mf">2</span><span class="p">);</span>
<span class="nx">b</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="mf">4</span><span class="p">,</span><span class="o">-</span><span class="mf">2</span><span class="p">);</span>
<span class="nx">c</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="mf">4</span><span class="p">);</span>
<span class="nx">m</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">(),</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">());</span>
<span class="nx">SetHide</span><span class="p">(</span><span class="nx">m</span><span class="p">,</span><span class="kc">true</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="nx">n</span><span class="o">=</span><span class="mf">0</span><span class="p">;</span><span class="nx">n</span><span class="err">≤</span><span class="mf">2000</span><span class="p">;</span><span class="nx">n</span><span class="o">++</span><span class="p">){</span>
<span class="w"> </span><span class="nx">dé</span><span class="o">=</span><span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span><span class="o">*</span><span class="mf">3</span><span class="p">);</span><span class="w"> </span><span class="c1">//dé à trois faces!</span>
<span class="w"> </span><span class="k">switch</span><span class="p">(</span><span class="nx">dé</span><span class="p">){</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mf">1</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="nx">p</span><span class="o">=</span><span class="nx">MidPoint</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">m</span><span class="p">);</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mf">2</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="nx">p</span><span class="o">=</span><span class="nx">MidPoint</span><span class="p">(</span><span class="nx">b</span><span class="p">,</span><span class="nx">m</span><span class="p">);</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mf">3</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="nx">p</span><span class="o">=</span><span class="nx">MidPoint</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span><span class="nx">m</span><span class="p">);</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nx">SetPointType</span><span class="p">(</span><span class="nx">p</span><span class="p">,</span><span class="s2">"point"</span><span class="p">);</span>
<span class="w"> </span><span class="nx">m</span><span class="o">=</span><span class="nx">p</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Seulement la figure est dynamique: On peut bouger les trois premiers points construits et le nuage de points suit le mouvement.
</p>
<div class="mw-heading mw-heading2"><h2 id="Objets_JavaScript">Objets JavaScript</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Tableaux">Tableaux</h3></div>
<p>Les objets de type <i>array</i> sont utiles pour stocker les noms ou les coordonnées de points (utile pour construire des objets dans l'espace, puisque CaRMetal gère les arêtes cachées), ou pour faire de la statistique dans un contexte graphique (recherche de distances <a href="M%C3%A9diane_(statistiques)" title="Médiane (statistiques)">médianes</a> ou <a href="Moyenne" title="Moyenne">moyennes</a> par exemple)
</p>
<div class="mw-heading mw-heading3"><h3 id="Expressions_rationnelles">Expressions rationnelles</h3></div>
<p>Les objets de type <i>String</i> et les <a href="RegExp" class="mw-redirect" title="RegExp">RegExp</a> à la <a href="Perl_(langage)" title="Perl (langage)">Perl</a> sont gérées par l'éditeur de CaRMetal, ce qui permet de simuler une tortue <a href="LOGO" class="mw-redirect" title="LOGO">LOGO</a> et de construire des figures basées sur les <a href="L-Syst%C3%A8me" title="L-Système">L-Systèmes</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Date">Date</h3></div>
<p>Grâce aux objets de type <i>Date</i> de JavaScript, CaRMetal sait quelle heure il est, ce qui permet de faire entrer le temps qui passe dans la figure. Il est possible par exemple d'incorporer une horloge à aiguilles tournantes dans une figure dynamique!
</p>
<div class="mw-heading mw-heading3"><h3 id="Fonctions_et_objets">Fonctions et objets</h3></div>
<p>Une <a href="Proc%C3%A9dure_(informatique)" class="mw-redirect" title="Procédure (informatique)">procédure</a> est une fonction sans l'instruction <i>return</i>. Une fonction (éventuellement de plusieurs variables) peut très bien s'appeler elle-même, devenant ainsi <a href="R%C3%A9cursivit%C3%A9" title="Récursivité">récursive</a>. Voici comment CaRMetal peut calculer récursivement un <a href="Pgcd" class="mw-redirect" title="Pgcd">pgcd</a>:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">pgcd</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="nx">b</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="nx">a</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">0</span><span class="p">){</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="nx">a</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="nx">pgcd</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="o">-</span><span class="nx">a</span><span class="p">));</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Comme en JavaScript les objets sont définis comme des fonctions, il est possible de créer des objets comme par exemple le type <a href="Nombre_complexe" title="Nombre complexe">nombre complexe</a> dont ci-dessous seule la méthode <i>dessine</i> est implémentée (il manque au moins les méthodes <a href="Somme_(arithm%C3%A9tique)" title="Somme (arithmétique)">somme</a>, <a href="Produit_(math%C3%A9matiques)" title="Produit (mathématiques)">produit</a>, <a href="Inverse" title="Inverse">inverse</a> et <a href="Conjugu%C3%A9" title="Conjugué">conjugué</a>!):
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">complexe</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span><span class="nx">y</span><span class="p">){</span>
<span class="w"> </span><span class="c1">//attributs de l'objet complexe:</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">real</span><span class="o">=</span><span class="nx">x</span><span class="p">;</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">imag</span><span class="o">=</span><span class="nx">y</span><span class="p">;</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">modulus</span><span class="o">=</span><span class="nb">Math</span><span class="p">.</span><span class="nx">sqrt</span><span class="p">(</span><span class="nx">x</span><span class="o">*</span><span class="nx">x</span><span class="o">+</span><span class="nx">y</span><span class="o">*</span><span class="nx">y</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">argument</span><span class="o">=</span><span class="nb">Math</span><span class="p">.</span><span class="nx">atan2</span><span class="p">(</span><span class="nx">y</span><span class="p">,</span><span class="nx">x</span><span class="p">);</span>
<span class="w"> </span><span class="c1">//méthodes de l'objet complexe:</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">dessine</span><span class="o">=</span><span class="kd">function</span><span class="p">(){</span><span class="c1">//dessine le point</span>
<span class="w"> </span><span class="nx">p</span><span class="o">=</span><span class="nx">Point</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span><span class="nx">y</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">conjugate</span><span class="o">=</span><span class="kd">function</span><span class="p">(){</span><span class="c1">//renvoie un complexe</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">complexe</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span><span class="o">-</span><span class="nx">y</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">inverse</span><span class="o">=</span><span class="kd">function</span><span class="p">(){</span><span class="c1">//renvoie un complexe</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">complexe</span><span class="p">(</span><span class="nx">x</span><span class="o">/</span><span class="p">(</span><span class="nx">x</span><span class="o">*</span><span class="nx">x</span><span class="o">+</span><span class="nx">y</span><span class="o">*</span><span class="nx">y</span><span class="p">),</span><span class="o">-</span><span class="nx">y</span><span class="o">/</span><span class="p">(</span><span class="nx">x</span><span class="o">*</span><span class="nx">x</span><span class="o">+</span><span class="nx">y</span><span class="o">*</span><span class="nx">y</span><span class="p">));</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="c1">//Les opérations ne peuvent pas être des méthodes de l'objet</span>
<span class="c1">// "complexe" parce qu'elles attendent 2 complexes </span>
<span class="kd">function</span><span class="w"> </span><span class="nx">complexe_somme</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">){</span><span class="c1">//a et b sont des complexes </span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">complexe</span><span class="p">(</span><span class="nx">a</span><span class="p">.</span><span class="nx">real</span><span class="o">+</span><span class="nx">b</span><span class="p">.</span><span class="nx">real</span><span class="p">,</span><span class="w"> </span><span class="nx">a</span><span class="p">.</span><span class="nx">imag</span><span class="o">+</span><span class="nx">b</span><span class="p">.</span><span class="nx">imag</span><span class="p">)</span>
<span class="p">}</span>
<span class="kd">function</span><span class="w"> </span><span class="nx">complexe_produit</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">){</span><span class="c1">//a et b sont des complexes</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">r</span><span class="o">=</span><span class="nx">a</span><span class="p">.</span><span class="nx">real</span><span class="o">*</span><span class="nx">b</span><span class="p">.</span><span class="nx">real</span><span class="o">-</span><span class="nx">a</span><span class="p">.</span><span class="nx">imag</span><span class="o">*</span><span class="nx">b</span><span class="p">.</span><span class="nx">imag</span><span class="p">;</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">i</span><span class="o">=</span><span class="nx">a</span><span class="p">.</span><span class="nx">real</span><span class="o">*</span><span class="nx">b</span><span class="p">.</span><span class="nx">imag</span><span class="o">+</span><span class="nx">a</span><span class="p">.</span><span class="nx">imag</span><span class="o">*</span><span class="nx">b</span><span class="p">.</span><span class="nx">real</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">complexe</span><span class="p">(</span><span class="nx">r</span><span class="p">,</span><span class="nx">i</span><span class="p">);</span>
<span class="p">}</span>
<span class="kd">function</span><span class="w"> </span><span class="nx">complexe_quotient</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">){</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">complexe_produit</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="nx">b</span><span class="p">.</span><span class="nx">inverse</span><span class="p">());</span>
<span class="p">}</span>
<span class="w"> </span>
<span class="kd">var</span><span class="w"> </span><span class="nx">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">complexe</span><span class="p">(</span><span class="mf">3</span><span class="p">,</span><span class="mf">2</span><span class="p">);</span>
<span class="nx">z</span><span class="p">.</span><span class="nx">dessine</span><span class="p">();</span>
<span class="nx">Println</span><span class="p">(</span><span class="nx">z</span><span class="p">.</span><span class="nx">argument</span><span class="o">*</span><span class="mf">180</span><span class="o">/</span><span class="nb">Math</span><span class="p">.</span><span class="nx">PI</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">zbar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">z</span><span class="p">.</span><span class="nx">conjugate</span><span class="p">();</span><span class="nx">zbar</span><span class="p">.</span><span class="nx">dessine</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">zsomme</span><span class="o">=</span><span class="nx">complexe_somme</span><span class="p">(</span><span class="nx">z</span><span class="p">,</span><span class="nx">zbar</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">u</span><span class="o">=</span><span class="nx">complexe_quotient</span><span class="p">(</span><span class="nx">z</span><span class="p">,</span><span class="nx">zbar</span><span class="p">);</span>
<span class="nx">u</span><span class="p">.</span><span class="nx">dessine</span><span class="p">();</span>
</pre></div>
<p>Bien que <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z+{\bar {z}}\in \mathbb {R} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>z</mi>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mover>
<mi>z</mi>
<mo stretchy="false">¯<!-- ¯ --></mo>
</mover>
</mrow>
</mrow>
<mo>∈<!-- ∈ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">R</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z+{\bar {z}}\in \mathbb {R} }</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/f3ced6760e21cc4cccb29cc827379fe62645c59e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:9.743ex; height:2.343ex;" alt="{\displaystyle z+{\bar {z}}\in \mathbb {R} }" loading="lazy"></span>, l'objet <i>zsomme</i> n'est pas considéré comme réel, mais comme un complexe de partie imaginaire nulle. Par ailleurs, les macros de <a href="CaRMetal" title="CaRMetal">CaRMetal</a> sur les nombres complexes sont meilleures que ces objets parce que les points créés par ces macros suivent le mouvement lorsqu'on bouge les objets initiaux à la souris, ce qui n'est pas le cas avec ces méthodes.
</p><p>On peut néanmoins aller plus loin dans l'interaction entre les objets créés par CaRScript et <a href="CaRMetal" title="CaRMetal">CaRMetal</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text">Des exemples sont visibles avec ces CARScripts en ligne : <a rel="nofollow" class="external autonumber" href="http://www.reunion.iufm.fr/recherche/irem/spip.php?rubrique98">[1]</a>, en particulier le troisième article, où on construit des <a href="L-syst%C3%A8me" class="mw-redirect" title="L-système">L-systèmes</a> manipulables dynamiquement par des curseurs, pendant la construction.</span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading2"><h2 id="Annexes">Annexes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r194021218">
/* start https://fr.wikipedia.org/ */
.mw-parser-output .autres-projets>.titre{text-align:center;margin:0.2em 0}.mw-parser-output .autres-projets>ul{margin:0;padding:0}.mw-parser-output .autres-projets>ul>li{list-style:none;margin:0.2em 0;text-indent:0;padding-left:24px;min-height:20px;text-align:left;display:block}.mw-parser-output .autres-projets>ul>li>a{font-style:italic}@media(max-width:720px){.mw-parser-output .autres-projets{float:none}}
/* end https://fr.wikipedia.org/ */
</style>
<div class="mw-heading mw-heading3"><h3 id="Articles_connexes">Articles connexes</h3></div>
<ul><li><a href="C.a.R." title="C.a.R.">C.a.R.</a></li>
<li><a href="CaRMetal" title="CaRMetal">CaRMetal</a></li>
<li><a href="JavaScript" title="JavaScript">JavaScript</a></li>
<li><a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">Programmation orientée objet</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.reunion.iufm.fr/recherche/irem/spip.php?rubrique58">Rubrique sur les CaRScripts</a> sur le site de l'IREM de <a href="La_R%C3%A9union" title="La Réunion">La Réunion</a>, avec un tutoriel et un manuel de référence</li>
<li><a rel="nofollow" class="external text" href="http://db-maths.nuxit.net/CaRMetal/forums/viewtopic.php?t=337">Des CaRScripts de statistique en Seconde</a></li>
<li><a rel="nofollow" class="external text" href="http://revue.sesamath.net/spip.php?article230">Article introductif</a> sur Mathematice</li>
<li><a rel="nofollow" class="external text" href="http://db-maths.nuxit.net/CaRMetal/forums/viewtopic.php?t=359">Utilisation d'objets en JavaScript pour fabriquer des motifs de cube</a> (le topic suivant reprend l'idée avec un dodécaèdre)</li>
<li><a rel="nofollow" class="external text" href="http://lycee-roland-garros.ac-reunion.fr/spip/spip.php?article259">Un CaRScript créé par un élève de Seconde</a> avec l'effet rendu en vidéo.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Bibliographie">Bibliographie</h3></div>
<ul><li>JavaScript, David Flanagan, éditions <a href="O'Reilly_Media" title="O'Reilly Media">O'Reilly</a></li>
<li>Bulletin Vert <abbr class="abbr" title="numéro">n<sup>o</sup></abbr> 487 de l'APMEP, <time class="nowrap" datetime="2010-03" data-sort-value="2010-03">mars 2010</time>: Article sur des CarScripts en classe</li></ul>
<div class="navbox-container" style="clear:both;">
</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail des logiciels libres</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la géométrie</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-01-10" href="https://fr.wikipedia.org/wiki/?title=CaRScript&oldid=221974446">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>